// 导入操作token的方法
import {removeToken, setToken, getToken, setTimeStamp} from "@/utils/auth"
// 导入网络请求
import {getInfoApi, getUserDetailApi, loginApi} from "@/api/user"

// user的状态

const state = {
  // 用户登录成功之后的标识token
  token:getToken(),
  //用户信息
  userInfo:{}
}
// 同步修改user的state方法
const mutations = {
  // 保存token（登录成功）
  setToken(state, token) {
    // 保存token在vuex
    state.token = token
    // 保存token到本地 cookie
    setToken(token)
    //顺便记录时间戳
    setTimeStamp()
  },
  // 删除token（登录成功）
  removeToken(state) {
    // 删除token在vuex
    state.token = null
    //cookie删除token
    removeToken()
  },
  //设置用户信息
  setUserInfo(state,userInfo){
    state.userInfo = userInfo
  },
  //删除用户信息
  removeUserInfo(state){
    state.userInfo = {}
  }
}
//异步修改user的state方法
const actions = {
  //登录接口
  async login({commit}, payload) {
    //调用登录的接口
    const res = await loginApi(payload)
    // console.log(res);
    //保存token的状态
    commit('setToken', res)
  },
  //获取用户信息
  async getUserInfo({commit},payload){
    //获取用户信息
   const res = await  getInfoApi()
    // console.log(res)
    //获取用户详细信息(包含头像地址)
    const detail = await getUserDetailApi(res.userId)
    // console.log(avatar)
    const data = {...res,...detail}
    //合并用户信息和详细信息
    //保存用户信息
    commit('setUserInfo',data)
    //返回用户信息
    return data
  },
  //退出登录移除token和用户信息
  loginOut({commit}){
    commit('removeToken')
    commit('removeUserInfo')
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
